package cn.bxshey.general.config;

import cn.bxshey.general.Result.Result;
import cn.bxshey.general.enums.ResultEnum;
import cn.bxshey.general.exception.BusinessException;
import cn.bxshey.general.exception.SystemException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.Map;
import java.util.Objects;

/**
 * @作者：不想说话而已
 * @Date：2023/12/5 11:44
 *
 * 全局异常处理
 */

@RestControllerAdvice
public class GlobalExceptionHandling {

    /**
     * 没有捕捉到的异常处理
     * 发送邮件通知开发人员
     */
    @ExceptionHandler(Exception.class)
    public <T> Result<Object> doException(Exception ex){
        System.err.println("未知异常--》"+ex.getMessage());
        ex.printStackTrace();
        return Result.error(ResultEnum.EXCEPTION);
    }

    //业务异常处理
    @ExceptionHandler(value = {BusinessException.class})
    public <T> Result<T> doBusinessException(BusinessException ex){
        System.err.println("异常---》"+ex.getException());
        System.err.println("code---------------》"+ex.getCode());
        System.err.println("args---------------》"+ex.getArgs());
        System.err.println("msg---------------》"+ex.getMessage());
//        System.err.println("异常---------------》"+ Objects.isNull(ex.getCause()) ? null : ex.getCause().toString());

        //记录日志

        //返回错误信息

        //如果记录日志失败信息



        return Result.error(ex.getCode(), ex.getMessage());
    }

    /**
     * 处理系统异常信息
     * 发送邮件通知开发人员
     */
    @ExceptionHandler(SystemException.class)
    public <T> Result<T> doSystemException(){
        return Result.error(ResultEnum.SYSTEM_BUSY);
    }


}
